#include <iostream>
using namespace std;

// 一.设计一个无法拷贝的类
// 拷贝只会发生在两个场景中：拷贝构造以及赋值运算符重载。
// 因此，想让一个类禁止拷贝，只需让该类不能调用拷贝构造函数以及赋值运算符重载即可。

// 1.C++98：将拷贝构造函数与赋值运算符重载访问权限设置为私有，只声明不用定义。
// 解释：
// 设置成私有：如果只声明没有设置成private，用户在类外就可以自己定义并且调用了，无法禁止拷贝。
// 只声明不定义：不定义因为该函数根本不会调用，定义了也无意义，不写更简单，不定义还能防止成员函数内部拷贝。
class CopyBan {
public:
	CopyBan() {} // 默认构造函数
	
private:
	// C++98:禁止拷贝构造函数和拷贝赋值操作
	CopyBan(const CopyBan&);
	CopyBan& operator=(const CopyBan&);
	
	// 或者C++11:
	// 扩展了delete的用法，delete除了释放new申请的资源外，在默认成员函数后跟上 = delete.
	// 表示让编译器删除掉该默认成员函数。(此时拷贝构造和赋值运算符重载的访问权限是什么都可以)
	// CopyBan(const CopyBan&) = delete;
	// CopyBan& operator=(const CopyBan&) = delete;
};

int main()
{
	CopyBan cb1;
	//CopyBan cb2(cb1); //err
	//CopyBan cb3 = cb1; //err
}

